package com.it.you.base.bingfa.future.completable;

import java.util.concurrent.*;

/**
 * 默认线程池：ForkJoinPool.commonPool
 *
 * 1、创建异步任务
 *      方法一：supplyAsync执行CompletableFuture任务，支持返回值
 *      方法二：runAsync执行CompletableFuture任务，没有返回值。
 * 2、任务异步回调
 * 3、多个任务组合处理
 */
public class CompletableFutureTest2 {
    public static void main(String[] args) {

        //可以自定义线程池
        ExecutorService executor = Executors.newCachedThreadPool();
        //runAsync的使用
        CompletableFuture<Void> runFuture = CompletableFuture.runAsync(() ->
                System.out.println("run,关注公众号:捡田螺的小男孩"), executor);
        //supplyAsync的使用
        CompletableFuture<String> supplyFuture = CompletableFuture.supplyAsync(() -> {
            System.out.print("supply,关注公众号:捡田螺的小男孩:");
            return "捡田螺的小男孩"; }, executor);
        System.out.println("============================================");
        //runAsync的future没有返回值，输出null
        System.out.println(runFuture.join());
        //supplyAsync的future，有返回值
        System.out.println(supplyFuture.join());
        executor.shutdown(); // 线程池需要关闭
    }
}
